iT邦幫忙

0

Porxy與跨域連線問題

  • 分享至 

  • xImage
  •  
  1. 甚麼是proxy? 
    PROXY只是本地端開發用的
    proxy類似替換路徑,將下述的/api傳換為後端需求的http://localhost:8080/ main

  2. 甚麼是跨域連線
    https://blog.csdn.net/huangpb123/article/details/122354830
    在本機中,前端與後端的port不能相同,他們個佔用了一個port,但是前端會需要跨域(跨一個port)請求資料
    此時就要跨域連線,通常是**本機開發(同網域開發)**才有這個問題

  3. 實際作法:有二
    3-1 前端修改proxy
    在本地端開發時後端API的Domain為http://localhost:8080/ 要打的API為/login
    這時候我在本地端開發時,由於前端的預設是http://localhost:8080/ port
    => 理論上我在專案中可以這樣做
    => API路徑為api/login,proxy配置為 /api 倒轉至 http://localhost:8080/

// Vue vite.config.ts
export default defineConfig({
  server: {
    port: 5000, // http://localhost:5000/
    proxy: {
      '/api': {
        target: 'http://127.0.0.1:8080', // 後端API伺服器domain
        changeOrigin: true,
      },
    },
  },
})
// 引用axios層
import axios from 'axios';

// 創建axios
const service = axios.create({
    // baseURL: '/api',
    baseURL: '/api', // 在 vite.config.ts 設定了 proxy,所以 baseURL 可以直接設定為 /api
    timeout: 80000
});

3-2 後端可以增加所有網域請求,讓本機可以打後端API

// Golang 
    w.Header().Set("Access-Control-Allow-Origin","*") // "*"代表允许所有的網域请求,目前"http://localhost:5000"是前端的網域
// Golang 完整
package main

import (
    "net/http"
)

func main() {
	http.HandleFunc("/aaa", func(w http.ResponseWriter, r *http.Request) {
		// 设置 CORS 头
		w.Header().Set("Access-Control-Allow-Origin") // "*"代表允许所有的網域请求,目前"http://localhost:5000"是前端的網域
		w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
		w.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, hextoken")
	
		// 如果是 OPTIONS 请求,直接返回成功
		if r.Method == "OPTIONS" {
			w.WriteHeader(http.StatusOK)
			return
		}
	
		// 其他的处理代码
	})
    http.ListenAndServe(":8080", nil)
}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言